package com.itheima.sky.controller.backend;


import com.itheima.sky.common.R;
import com.itheima.sky.entity.Page;
import com.itheima.sky.entity.Result;
import com.itheima.sky.pojo.Category;
import com.itheima.sky.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

@RestController
@Slf4j
@RequestMapping("/category")
public class CategoryControllerBack {

    @Autowired
    private CategoryService categoryService;


    /**
     * 添加分类
     *
     * @param category
     * @param session
     * @return
     */
    @PostMapping
    public R<String> save(@RequestBody Category category, HttpSession session) {
        //1. 获取当前登陆者
        Long empId = (Long) session.getAttribute("empId");
        //2. 补全category信息
        category.setCreateUser(empId);
        category.setUpdateUser(empId);
        categoryService.save(category);
        return R.success("添加类别成功");
    }

    /**
     * 作用： 类别分页管理
     *
     * @param page     当前页
     * @param pageSize 页面大小
     * @return
     */
//    @GetMapping("/page")
//    public R<Page<Category>> save(Integer page, Integer pageSize) {
//        Page<Category> pageResult = categoryService.findByPage(page, pageSize);
//        return R.success(pageResult);
//    }


    /**
     * 根据id删除分类
     *
     * @param id
     * @return
     */
//    @DeleteMapping
//    public R<String> delete(Long id) {
//        categoryService.removeById(id);
//        return R.success("分类信息删除成功");
//    }


    /**
     * 作用：修改类别
     *
     * @param category
     * @return
     */
    @PutMapping
    public R<String> update(@RequestBody Category category, HttpSession session) {
        //1. 获取当前登陆者
        Long empId = (Long) session.getAttribute("empId");
        //2. 修改修改者的信息
        category.setUpdateUser(empId);
        categoryService.updateById(category);

        return R.success("修改成功");
    }


    @GetMapping("/exportExcel")
    public void exportExcel(HttpServletResponse response) throws IOException {
        response.setHeader("content-disposition", "attachment;filename=category.xlsx");

        //1. 读取模板的输入流
        InputStream inputStream = this.getClass().getResourceAsStream("/excel/category.xlsx");

        //2。 使用模板的输入流构建一个工作薄
        Workbook workbook = new XSSFWorkbook(inputStream);

        //3. 得到工作单
        Sheet sheet = workbook.getSheetAt(0);

        //4. 读取第一行,提取第一行的样式，并且存储到集合中
        Row row = sheet.getRow(1);
        List<CellStyle> cellStylesList = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            //得到单元格的样式
            CellStyle cellStyle = row.getCell(i).getCellStyle();
            cellStylesList.add(cellStyle);
        }

        //5. 得到数据,遍历数据，把数据写入到excel
        List<Category> categoryList = categoryService.findAll();
        for (int i = 0; i < categoryList.size(); i++) {
            //一个类别就对应一行
            row = sheet.createRow(i + 1);
            Category category = categoryList.get(i);
            //把类别信息设置到单元格上

            //类别类型
            Cell cell = row.createCell(0);
            //设置单元格内容
            cell.setCellValue(category.getType());
            cell.setCellStyle(cellStylesList.get(0));

            //类别名字
            cell = row.createCell(1);
            //设置单元格内容
            cell.setCellValue(category.getName());
            cell.setCellStyle(cellStylesList.get(1));


            //类别排序
            cell = row.createCell(2);
            //设置单元格内容
            cell.setCellValue(category.getSort());
            cell.setCellStyle(cellStylesList.get(2));

            //创建时间
            cell = row.createCell(3);
            //设置单元格内容
            cell.setCellValue(category.getCreateTime().toLocalDate().toString());
            cell.setCellStyle(cellStylesList.get(3));


            //创建时间
            cell = row.createCell(4);
            //设置单元格内容
            cell.setCellValue(category.getUpdateTime().toLocalDate().toString());
            cell.setCellStyle(cellStylesList.get(4));
        }
        //6. 把工作薄写出
        workbook.write(response.getOutputStream());

    }

    //pan

    /**
     * 作用：根据Type查询类别集合
     * @param type  类别的type
     * @return
     */
//    @GetMapping("/list")
//    public Result list(Integer type) {
//        List<Category> categoryList =   categoryService.list(type);
//        return Result.success(categoryList);
//    }



    /**
     * 添加分类
     * @param category
     * @param session
     * @return
     */
//    @PostMapping
//    public Result saveP(@RequestBody  Category category, HttpSession session){
//        //1. 获取当前登陆者
//        Long empId = (Long) session.getAttribute("employee");
//        //2. 补全category信息
//        category.setCreateUser(empId);
//        category.setUpdateUser(empId);
//        categoryService.save(category);
//        return Result.success("添加类别成功");
//    }
    /**
     * 作用： 类别分页管理
     * @param page   当前页
     * @param pageSize  页面大小
     * @return
     */
    @GetMapping("/page")
    public Result saveP(Integer page, Integer pageSize){
        Page<Category> pageResult =   categoryService.findByPage(page,pageSize);
        return Result.success(pageResult);
    }
    /**
     * 根据id删除分类
     * @param id
     * @return
     */
    @DeleteMapping
    public Result deleteP(Long id){
        categoryService.removeById(id);
        return Result.success("分类信息删除成功");
    }
    /**
     * 作用：修改类别
     * @param category
     * @return
     */
//    @PutMapping
//    public Result updateP(@RequestBody  Category category, HttpSession session) {
//        //1. 获取当前登陆者
//        Long empId = (Long) session.getAttribute("employee");
//        //2. 修改修改者的信息
//        category.setUpdateUser(empId);
//        categoryService.updateById(category);
//
//        return Result.success("修改成功");
//    }




}


